看了一下各位大佬的思路,大多都是用Map来解答的。想到一个用动态规划做的思路。
1.定义一个布尔型数组;
2.从后开始往前遍历。对每个字符再从当前位置向后遍历,如果遇到与其相同的,那么就将这两个位置的flag[i],flag[j]都设置为true;
3.最后,从前向后遍历flag数组,那么第一个仍为false的位置即为第一个只出现一次的字符。
public class Solution { public int FirstNotRepeatingChar(String str) { int len = str.length(); if(len==0) return -1; if(len==1) return 0; boolean[] flag = new boolean[len]; for(int i=len-1;i>=0;i--){ for(int j=i+1;j<len;j++){ if(str.charAt(i)==str.charAt(j)){ flag[i] = true; flag[j] = true; break; } } } for(int i=0;i<len;i++){ if(flag[i]==false) return i; } return -1; } }