品牌网站建设价格实惠,网页设计与网站建设课程,做网站是干嘛的,企业信用信息公示系统广东题目部分#xff1a; 解题思路#xff1a;
方案一#xff1a;
首先认真审题的小伙伴们一定会发现就是题目给了提示只包含小写字母#xff0c;也就是说我们的排查范围是小写的26个字母。为了怕有的友友们一时短路想不起来#xff0c;我就其按照顺序列出来吧。
即#x… 题目部分 解题思路
方案一
首先认真审题的小伙伴们一定会发现就是题目给了提示只包含小写字母也就是说我们的排查范围是小写的26个字母。为了怕有的友友们一时短路想不起来我就其按照顺序列出来吧。
即a、b、c、d、e、f、g、h、i、j、k、l、m、n、o、p、q、r、s、t、u、v、w、x、y、z
根据题意我们的目标就是从给出的字符串中找出出现的第一个不重复出现的小写26个字母中的一个并将其对应在字符串数组中的下标位置返回去若找完整个字符串后均为重复出现的子母即未发现只出现一次的子母则返回-1。
附ASCII表 结合我们的ASCII表就可以很轻松的做出此题来根据该表的提示我们可以发现初始字母a所映射对应的整数是97那么我们就可以开始做文章了。
定义一个计算每个小写字母出现次数的数组默认我都是按照26个字母的顺序并初始化为0。
紧接着用一个循环来统计出每个字母所出现的次数循环内如何操作呢代码走的逻辑就是拿当前字符串中当前对应的字母映射的整数值减去字母a映射的整数值就能得知该字母在我们统计出现次数数组中的位置并表示它已经出现一次了所以要在原有次数上加一。 为了怕大家不懂我统计次数循环内代码走的逻辑我特意拿示例1来做示范讲解。
示例1给的字符串第一个字母是l在ASCII表映射对应的整数是108前面我们不是有讲到初始字母a在该表映射对应的整数是97吗用108-9711也就是代表数组中的第11个位置也就是l的位置的字母出现了一次【需要清楚的是数组下标是从0开始家人们别忘记了】因此要在该元素位置次数1。 很多xdm可能会疑惑为什么要减字母a呢干嘛不减字母b呢这就是可能you钻牛角尖了。我在前面就有说过我默认的字母数组出现次数的排序是按照它们原本的顺序。对应关系就是我下图所示 只有从减字母a开始才能对应的了上图的关系若到这里还不能理解的话我建议大神你回炉重造 前面所的是第一个循环接着是代码中出现的第二个循环的作用——就是找出这个字符串中第一个不重复的字符然后将其数组的下标返回回去。这第二个循环是需要基于第一个循环的若字母都是至少出现了两次即重复就意味着并不符合题意的要求按照题目的规定就返回-1回去。
如果你理解了前面第一个循环那么第二个循环理解就会相对简单走的逻辑跟第一个循环类似只不过是为了找出只出现1次的字母顺带将其数组下标返回即可完成题目要求。 方案一演示代码讲解如下 附方案一代码提取
class Solution {
public:int firstUniqChar(string s) {// 定义26个字母出现次数的数组初始化都为0// 默认的26个字母顺序为a、b、c、d、e...x、y、zint countArray[26] { 0 };// 统计每个字母所出现的次数for (size_t i 0; i s.size(); i){countArray[s[i] - a];}// 找出它第一个不重复的字符并返回数组下标for (int j 0; j s.size(); j){if (countArray[s[j] - a] 1){return j;}}return -1;}
};测试结果
方案一 不出意外的话家人们必定是狠狠拿下 备注
楼主不才不喜勿喷若有错误或需要改进的地方非常感谢你的指出我会积极学习采纳。谢谢家人们一直以来的支持和鼓励我会继续努力再接再励创作出更多优质的文章来回报家人们的。编程爱好的xdm若有编程学习方面的问题可以私信我一同探讨我尽力帮毕竟“众人拾柴火焰高”大家一起交流学习共同进步 2023年4月8日